home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume2 / dungeon / part02 < prev    next >
Encoding:
Internet Message Format  |  1987-09-01  |  55.1 KB

  1. Path: uunet!husc6!mit-eddie!genrad!decvax!tektronix!tekgen!tekred!games-request
  2. From: games-request@tekred.TEK.COM
  3. Newsgroups: comp.sources.games
  4. Subject: v02i035:  dungeon - game of adventure, Part02/14
  5. Message-ID: <1558@tekred.TEK.COM>
  6. Date: 1 Sep 87 18:49:33 GMT
  7. Sender: billr@tekred.TEK.COM
  8. Lines: 2157
  9. Approved: billr@tekred.TEK.COM
  10.  
  11. Submitted by: Bill Randle <games-request@tekred.TEK.COM>
  12. Comp.sources.games: Volume 2, Issue 35
  13. Archive-name: dungeon/Part02
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then unpack
  17. # it by saving it into a file and typing "sh file".  To overwrite existing
  18. # files, type "sh file -c".  You can also feed this as standard input via
  19. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  20. # will see the following message at the end:
  21. #        "End of archive 2 (of 7)."
  22. # Contents:  clockr.F dungeon.doc verbs.F
  23. # Wrapped by billr@tekred on Tue Apr 21 10:24:24 1987
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test -f clockr.F -a "${1}" != "-c" ; then 
  26.   echo shar: Will not over-write existing file \"clockr.F\"
  27. else
  28. echo shar: Extracting \"clockr.F\" \(12197 characters\)
  29. sed "s/^X//" >clockr.F <<'END_OF_clockr.F'
  30. XC CEVAPP- CLOCK EVENT APPLICABLES
  31. XC
  32. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  33. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  34. XC WRITTEN BY R. M. SUPNIK
  35. XC
  36. XC DECLARATIONS
  37. XC
  38. X    SUBROUTINE CEVAPP(RI)
  39. X    IMPLICIT INTEGER (A-Z)
  40. X    INTEGER CNDTCK(10),LMPTCK(12)
  41. X    LOGICAL FINDXT,LIT,RMDESC,QOPEN,MOVETO
  42. X    LOGICAL F,QLEDGE,QVAIR,QHERE,PROB
  43. X#include "gamestate.h"
  44. X#include "state.h"
  45. X#include "rooms.h"
  46. X#include "rflag.h"
  47. X#include "rindex.h"
  48. X#include "objects.h"
  49. X#include "oflags.h"
  50. X#include "oindex.h"
  51. X#include "clock.h"
  52. X#include "curxt.h"
  53. X#include "xsrch.h"
  54. X#include "villians.h"
  55. X#include "advers.h"
  56. X#include "flags.h"
  57. XC
  58. XC FUNCTIONS AND DATA
  59. XC
  60. X    QOPEN(R)=(and(OFLAG2(R),OPENBT)).NE.0
  61. X    QLEDGE(R)=(R.EQ.LEDG2).OR.(R.EQ.LEDG3).OR.(R.EQ.LEDG4).OR.
  62. X&        (R.EQ.VLBOT)
  63. X    QVAIR(R)=(R.EQ.VAIR1).OR.(R.EQ.VAIR2).OR.(R.EQ.VAIR3).OR.
  64. X&         (R.EQ.VAIR4)
  65. X    DATA CNDTCK/50,20,10,5,0,156,156,156,157,0/
  66. X    DATA LMPTCK/50,30,20,10,4,0,154,154,154,154,155,0/
  67. XC CEVAPP, PAGE 2
  68. XC
  69. X    IF(RI.EQ.0) RETURN
  70. XC                        !IGNORE DISABLED.
  71. X    GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
  72. X&     11000,12000,13000,14000,15000,16000,17000,18000,19000,
  73. X&     20000,21000,22000,23000,24000),RI
  74. X    CALL BUG(3,RI)
  75. XC
  76. XC CEV1--    CURE CLOCK.  LET PLAYER SLOWLY RECOVER.
  77. XC
  78. X1000    ASTREN(PLAYER)=MIN0(0,ASTREN(PLAYER)+1)
  79. XC                        !RECOVER.
  80. X    IF(ASTREN(PLAYER).GE.0) RETURN
  81. XC                        !FULLY RECOVERED?
  82. X    CTICK(CEVCUR)=30
  83. XC                        !NO, WAIT SOME MORE.
  84. X    RETURN
  85. XC
  86. XC CEV2--    MAINT-ROOM WITH LEAK.  RAISE THE WATER LEVEL.
  87. XC
  88. X2000    IF(HERE.EQ.MAINT) CALL RSPEAK(71+(RVMNT/2))
  89. XC                        !DESCRIBE.
  90. X    RVMNT=RVMNT+1
  91. XC                        !RAISE WATER LEVEL.
  92. X    IF(RVMNT.LE.16) RETURN
  93. XC                        !IF NOT FULL, EXIT.
  94. X    CTICK(CEVMNT)=0
  95. XC                        !FULL, DISABLE CLOCK.
  96. X    RFLAG(MAINT)=or(RFLAG(MAINT),RMUNG)
  97. X    RRAND(MAINT)=80
  98. XC                        !SAY IT IS FULL OF WATER.
  99. X    IF(HERE.EQ.MAINT) CALL JIGSUP(81)
  100. XC                        !DROWN HIM IF PRESENT.
  101. X    RETURN
  102. XC
  103. XC CEV3--    LANTERN.  DESCRIBE GROWING DIMNESS.
  104. XC
  105. X3000    CALL LITINT(LAMP,ORLAMP,CEVLNT,LMPTCK,12)
  106. XC                        !DO LIGHT INTERRUPT.
  107. X    RETURN
  108. XC
  109. XC CEV4--    MATCH.  OUT IT GOES.
  110. XC
  111. X4000    CALL RSPEAK(153)
  112. XC                        !MATCH IS OUT.
  113. X    OFLAG1(MATCH)=and(OFLAG1(MATCH), not(ONBT))
  114. X    RETURN
  115. XC
  116. XC CEV5--    CANDLE.  DESCRIBE GROWING DIMNESS.
  117. XC
  118. X5000    CALL LITINT(CANDL,ORCAND,CEVCND,CNDTCK,10)
  119. XC                        !DO CANDLE INTERRUPT.
  120. X    RETURN
  121. XC CEVAPP, PAGE 3
  122. XC
  123. XC CEV6--    BALLOON
  124. XC
  125. X6000    CTICK(CEVBAL)=3
  126. XC                        !RESCHEDULE INTERRUPT.
  127. X    F=AVEHIC(WINNER).EQ.BALLO
  128. XC                        !SEE IF IN BALLOON.
  129. X    IF(BLOC.EQ.VLBOT) GO TO 6800
  130. XC                        !AT BOTTOM?
  131. X    IF(QLEDGE(BLOC)) GO TO 6700
  132. XC                        !ON LEDGE?
  133. X    IF(QOPEN(RECEP).AND.(BINFF.NE.0))
  134. X&        GO TO 6500
  135. XC
  136. XC BALLOON IS IN MIDAIR AND IS DEFLATED (OR HAS RECEPTACLE CLOSED).
  137. XC FALL TO NEXT ROOM.
  138. XC
  139. X    IF(BLOC.NE.VAIR1) GO TO 6300
  140. XC                        !IN VAIR1?
  141. X    BLOC=VLBOT
  142. XC                        !YES, NOW AT VLBOT.
  143. X    CALL NEWSTA(BALLO,0,BLOC,0,0)
  144. X    IF(F) GO TO 6200
  145. XC                        !IN BALLOON?
  146. X    IF(QLEDGE(HERE)) CALL RSPEAK(530)
  147. XC                        !ON LEDGE, DESCRIBE.
  148. X    RETURN
  149. XC
  150. X6200    F=MOVETO(BLOC,WINNER)
  151. XC                        !MOVE HIM.
  152. X    IF(BINFF.EQ.0) GO TO 6250
  153. XC                        !IN BALLOON.  INFLATED?
  154. X    CALL RSPEAK(531)
  155. XC                        !YES, LANDED.
  156. X    F=RMDESC(0)
  157. XC                        !DESCRIBE.
  158. X    RETURN
  159. XC
  160. X6250    CALL NEWSTA(BALLO,532,0,0,0)
  161. XC                        !NO, BALLOON & CONTENTS DIE.
  162. X    CALL NEWSTA(DBALL,0,BLOC,0,0)
  163. XC                        !INSERT DEAD BALLOON.
  164. X    AVEHIC(WINNER)=0
  165. XC                        !NOT IN VEHICLE.
  166. X    CFLAG(CEVBAL)=.FALSE.
  167. XC                        !DISABLE INTERRUPTS.
  168. X    CFLAG(CEVBRN)=.FALSE.
  169. X    BINFF=0
  170. X    BTIEF=0
  171. X    RETURN
  172. XC
  173. X6300    BLOC=BLOC-1
  174. XC                        !NOT IN VAIR1, DESCEND.
  175. X    CALL NEWSTA(BALLO,0,BLOC,0,0)
  176. X    IF(F) GO TO 6400
  177. XC                        !IS HE IN BALLOON?
  178. X    IF(QLEDGE(HERE)) CALL RSPEAK(533)
  179. XC                        !IF ON LEDGE, DESCRIBE.
  180. X    RETURN
  181. XC
  182. X6400    F=MOVETO(BLOC,WINNER)
  183. XC                        !IN BALLOON, MOVE HIM.
  184. X    CALL RSPEAK(534)
  185. XC                        !DESCRIBE.
  186. X    F=RMDESC(0)
  187. X    RETURN
  188. XC
  189. XC BALLOON IS IN MIDAIR AND IS INFLATED, UP-UP-AND-AWAY
  190. XC                        !
  191. XC
  192. X6500    IF(BLOC.NE.VAIR4) GO TO 6600
  193. XC                        !AT VAIR4?
  194. X    CTICK(CEVBRN)=0
  195. X    CTICK(CEVBAL)=0
  196. X    BINFF=0
  197. X    BTIEF=0
  198. X    BLOC=VLBOT
  199. XC                        !FALL TO BOTTOM.
  200. X    CALL NEWSTA(BALLO,0,0,0,0)
  201. XC                        !BALLOON & CONTENTS DIE.
  202. X    CALL NEWSTA(DBALL,0,BLOC,0,0)
  203. XC                        !SUBSTITUTE DEAD BALLOON.
  204. X    IF(F) GO TO 6550
  205. XC                        !WAS HE IN IT?
  206. X    IF(QLEDGE(HERE)) CALL RSPEAK(535)
  207. XC                        !IF HE CAN SEE, DESCRIBE.
  208. X    RETURN
  209. XC
  210. X6550    CALL JIGSUP(536)
  211. XC                        !IN BALLOON AT CRASH, DIE.
  212. X    RETURN
  213. XC
  214. X6600    BLOC=BLOC+1
  215. XC                        !NOT AT VAIR4, GO UP.
  216. X    CALL NEWSTA(BALLO,0,BLOC,0,0)
  217. X    IF(F) GO TO 6650
  218. XC                        !IN BALLOON?
  219. X    IF(QLEDGE(HERE)) CALL RSPEAK(537)
  220. XC                        !CAN HE SEE IT?
  221. X    RETURN
  222. XC
  223. X6650    F=MOVETO(BLOC,WINNER)
  224. XC                        !MOVE PLAYER.
  225. X    CALL RSPEAK(538)
  226. XC                        !DESCRIBE.
  227. X    F=RMDESC(0)
  228. X    RETURN
  229. XC
  230. XC ON LEDGE, GOES TO MIDAIR ROOM WHETHER INFLATED OR NOT.
  231. XC
  232. X6700    BLOC=BLOC+(VAIR2-LEDG2)
  233. XC                        !MOVE TO MIDAIR.
  234. X    CALL NEWSTA(BALLO,0,BLOC,0,0)
  235. X    IF(F) GO TO 6750
  236. XC                        !IN BALLOON?
  237. X    IF(QLEDGE(HERE)) CALL RSPEAK(539)
  238. XC                        !NO, STRANDED.
  239. X    CTICK(CEVVLG)=10
  240. XC                        !MATERIALIZE GNOME.
  241. X    RETURN
  242. XC
  243. X6750    F=MOVETO(BLOC,WINNER)
  244. XC                        !MOVE TO NEW ROOM.
  245. X    CALL RSPEAK(540)
  246. XC                        !DESCRIBE.
  247. X    F=RMDESC(0)
  248. X    RETURN
  249. XC
  250. XC AT BOTTOM, GO UP IF INFLATED, DO NOTHING IF DEFLATED.
  251. XC
  252. X6800    IF((BINFF.EQ.0).OR..NOT.QOPEN(RECEP)) RETURN
  253. X    BLOC=VAIR1
  254. XC                        !INFLATED AND OPEN,
  255. X    CALL NEWSTA(BALLO,0,BLOC,0,0)
  256. XC                        !GO UP TO VAIR1.
  257. X    IF(F) GO TO 6850
  258. XC                        !IN BALLOON?
  259. X    IF(QLEDGE(HERE)) CALL RSPEAK(541)
  260. XC                        !IF CAN SEE, DESCRIBE.
  261. X    RETURN
  262. XC
  263. X6850    F=MOVETO(BLOC,WINNER)
  264. XC                        !MOVE PLAYER.
  265. X    CALL RSPEAK(542)
  266. X    F=RMDESC(0)
  267. X    RETURN
  268. XC CEVAPP, PAGE 4
  269. XC
  270. XC CEV7--    BALLOON BURNUP
  271. XC
  272. X7000    DO 7100 I=1,OLNT
  273. XC                        !FIND BURNING OBJECT
  274. X      IF((RECEP.EQ.OCAN(I)).AND.((and(OFLAG1(I),FLAMBT)).NE.0))
  275. X&        GO TO 7200
  276. X7100    CONTINUE
  277. X    CALL BUG(4,0)
  278. XC
  279. X7200    CALL NEWSTA(I,0,0,0,0)
  280. XC                        !VANISH OBJECT.
  281. X    BINFF=0
  282. XC                        !UNINFLATED.
  283. X    IF(HERE.EQ.BLOC) CALL RSPSUB(292,ODESC2(I))
  284. XC                        !DESCRIBE.
  285. X    RETURN
  286. XC
  287. XC CEV8--    FUSE FUNCTION
  288. XC
  289. X8000    IF(OCAN(FUSE).NE.BRICK) GO TO 8500
  290. XC                        !IGNITED BRICK?
  291. X    BR=OROOM(BRICK)
  292. XC                        !GET BRICK ROOM.
  293. X    BC=OCAN(BRICK)
  294. XC                        !GET CONTAINER.
  295. X    IF((BR.EQ.0).AND.(BC.NE.0)) BR=OROOM(BC)
  296. X    CALL NEWSTA(FUSE,0,0,0,0)
  297. XC                        !KILL FUSE.
  298. X    CALL NEWSTA(BRICK,0,0,0,0)
  299. XC                        !KILL BRICK.
  300. X    IF((BR.NE.0).AND.(BR.NE.HERE)) GO TO 8100
  301. XC                        !BRICK ELSEWHERE?
  302. XC
  303. X    RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
  304. X    RRAND(HERE)=114
  305. XC                        !MUNG ROOM.
  306. X    CALL JIGSUP(150)
  307. XC                        !DEAD.
  308. X    RETURN
  309. XC
  310. X8100    CALL RSPEAK(151)
  311. XC                        !BOOM.
  312. X    MUNGRM=BR
  313. XC                        !SAVE ROOM THAT BLEW.
  314. X    CTICK(CEVSAF)=5
  315. XC                        !SET SAFE INTERRUPT.
  316. X    IF(BR.NE.MSAFE) GO TO 8200
  317. XC                        !BLEW SAFE ROOM?
  318. X    IF(BC.NE.SSLOT) RETURN
  319. XC                        !WAS BRICK IN SAFE?
  320. X    CALL NEWSTA(SSLOT,0,0,0,0)
  321. XC                        !KILL SLOT.
  322. X    OFLAG2(SAFE)=or(OFLAG2(SAFE),OPENBT)
  323. X    SAFEF=.TRUE.
  324. XC                        !INDICATE SAFE BLOWN.
  325. X    RETURN
  326. XC
  327. X8200    DO 8250 I=1,OLNT
  328. XC                        !BLEW WRONG ROOM.
  329. X      IF(QHERE(I,BR) .AND. ((and(OFLAG1(I),TAKEBT)).NE.0))
  330. X&        CALL NEWSTA(I,0,0,0,0)
  331. X8250    CONTINUE
  332. X    IF(BR.NE.LROOM) RETURN
  333. XC                        !BLEW LIVING ROOM?
  334. X    DO 8300 I=1,OLNT
  335. X      IF(OCAN(I).EQ.TCASE) CALL NEWSTA(I,0,0,0,0)
  336. XC                        !KILL TROPHY CASE.
  337. X8300    CONTINUE
  338. X    RETURN
  339. XC
  340. X8500    IF(QHERE(FUSE,HERE).OR.(OADV(FUSE).EQ.WINNER))
  341. X&        CALL RSPEAK(152)
  342. X    CALL NEWSTA(FUSE,0,0,0,0)
  343. XC                        !KILL FUSE.
  344. X    RETURN
  345. XC CEVAPP, PAGE 5
  346. XC
  347. XC CEV9--    LEDGE MUNGE.
  348. XC
  349. X9000    RFLAG(LEDG4)=or(RFLAG(LEDG4),RMUNG)
  350. X    RRAND(LEDG4)=109
  351. X    IF(HERE.EQ.LEDG4) GO TO 9100
  352. XC                        !WAS HE THERE?
  353. X    CALL RSPEAK(110)
  354. XC                        !NO, NARROW ESCAPE.
  355. X    RETURN
  356. XC
  357. X9100    IF(AVEHIC(WINNER).NE.0) GO TO 9200
  358. XC                        !IN VEHICLE?
  359. X    CALL JIGSUP(111)
  360. XC                        !NO, DEAD.
  361. X    RETURN
  362. XC
  363. X9200    IF(BTIEF.NE.0) GO TO 9300
  364. XC                        !TIED TO LEDGE?
  365. X    CALL RSPEAK(112)
  366. XC                        !NO, NO PLACE TO LAND.
  367. X    RETURN
  368. XC
  369. X9300    BLOC=VLBOT
  370. XC                        !YES, CRASH BALLOON.
  371. X    CALL NEWSTA(BALLO,0,0,0,0)
  372. XC                        !BALLOON & CONTENTS DIE.
  373. X    CALL NEWSTA(DBALL,0,BLOC,0,0)
  374. XC                        !INSERT DEAD BALLOON.
  375. X    BTIEF=0
  376. X    BINFF=0
  377. X    CFLAG(CEVBAL)=.FALSE.
  378. X    CFLAG(CEVBRN)=.FALSE.
  379. X    CALL JIGSUP(113)
  380. XC                        !DEAD
  381. X    RETURN
  382. XC
  383. XC CEV10--    SAFE MUNG.
  384. XC
  385. X10000    RFLAG(MUNGRM)=or(RFLAG(MUNGRM),RMUNG)
  386. X    RRAND(MUNGRM)=114
  387. X    IF(HERE.EQ.MUNGRM) GO TO 10100
  388. XC                        !IS HE PRESENT?
  389. X    CALL RSPEAK(115)
  390. XC                        !LET HIM KNOW.
  391. X    IF(MUNGRM.EQ.MSAFE) CTICK(CEVLED)=8
  392. XC                        !START LEDGE CLOCK.
  393. X    RETURN
  394. XC
  395. X10100    I=116
  396. XC                        !HE'S DEAD,
  397. X    IF((and(RFLAG(HERE),RHOUSE)).NE.0) I=117
  398. X    CALL JIGSUP(I)
  399. XC                        !LET HIM KNOW.
  400. X    RETURN
  401. XC CEVAPP, PAGE 6
  402. XC
  403. XC CEV11--    VOLCANO GNOME
  404. XC
  405. X11000    IF(QLEDGE(HERE)) GO TO 11100
  406. XC                        !IS HE ON LEDGE?
  407. X    CTICK(CEVVLG)=1
  408. XC                        !NO, WAIT A WHILE.
  409. X    RETURN
  410. XC
  411. X11100    CALL NEWSTA(GNOME,118,HERE,0,0)
  412. XC                        !YES, MATERIALIZE GNOME.
  413. X    RETURN
  414. XC
  415. XC CEV12--    VOLCANO GNOME DISAPPEARS
  416. XC
  417. X12000    CALL NEWSTA(GNOME,149,0,0,0)
  418. XC                        !DISAPPEAR THE GNOME.
  419. X    RETURN
  420. XC
  421. XC CEV13--    BUCKET.
  422. XC
  423. X13000    IF(OCAN(WATER).EQ.BUCKE)
  424. X&        CALL NEWSTA(WATER,0,0,0,0)
  425. X    RETURN
  426. XC
  427. XC CEV14--    SPHERE.  IF EXPIRES, HE'S TRAPPED.
  428. XC
  429. X14000    RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG)
  430. X    RRAND(CAGER)=147
  431. X    CALL JIGSUP(148)
  432. XC                        !MUNG PLAYER.
  433. X    RETURN
  434. XC
  435. XC CEV15--    END GAME HERALD.
  436. XC
  437. X15000    ENDGMF=.TRUE.
  438. XC                        !WE'RE IN ENDGAME.
  439. X    CALL RSPEAK(119)
  440. XC                        !INFORM OF ENDGAME.
  441. X    RETURN
  442. XC CEVAPP, PAGE 7
  443. XC
  444. XC CEV16--    FOREST MURMURS
  445. XC
  446. X16000    CFLAG(CEVFOR)=(HERE.EQ.MTREE).OR.
  447. X&        ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))
  448. X    IF(CFLAG(CEVFOR).AND.PROB(10,10)) CALL RSPEAK(635)
  449. X    RETURN
  450. XC
  451. XC CEV17--    SCOL ALARM
  452. XC
  453. X17000    IF(HERE.EQ.BKTWI) CFLAG(CEVZGI)=.TRUE.
  454. XC                        !IF IN TWI, GNOME.
  455. X    IF(HERE.EQ.BKVAU) CALL JIGSUP(636)
  456. XC                        !IF IN VAU, DEAD.
  457. X    RETURN
  458. XC
  459. XC CEV18--    ENTER GNOME OF ZURICH
  460. XC
  461. X18000    CFLAG(CEVZGO)=.TRUE.
  462. XC                        !EXITS, TOO.
  463. X    CALL NEWSTA(ZGNOM,0,BKTWI,0,0)
  464. XC                        !PLACE IN TWI.
  465. X    IF(HERE.EQ.BKTWI) CALL RSPEAK(637)
  466. XC                        !ANNOUNCE.
  467. X    RETURN
  468. XC
  469. XC CEV19--    EXIT GNOME
  470. XC
  471. X19000    CALL NEWSTA(ZGNOM,0,0,0,0)
  472. XC                        !VANISH.
  473. X    IF(HERE.EQ.BKTWI) CALL RSPEAK(638)
  474. XC                        !ANNOUNCE.
  475. X    RETURN
  476. XC CEVAPP, PAGE 8
  477. XC
  478. XC CEV20--    START OF ENDGAME
  479. XC
  480. X20000    IF(SPELLF) GO TO 20200
  481. XC                        !SPELL HIS WAY IN?
  482. X    IF(HERE.NE.CRYPT) RETURN
  483. XC                        !NO, STILL IN TOMB?
  484. X    IF(.NOT.LIT(HERE)) GO TO 20100
  485. XC                        !LIGHTS OFF?
  486. X    CTICK(CEVSTE)=3
  487. XC                        !RESCHEDULE.
  488. X    RETURN
  489. XC
  490. X20100    CALL RSPEAK(727)
  491. XC                        !ANNOUNCE.
  492. X20200    DO 20300 I=1,OLNT
  493. XC                        !STRIP HIM OF OBJS.
  494. X      CALL NEWSTA(I,0,OROOM(I),OCAN(I),0)
  495. X20300    CONTINUE
  496. X    CALL NEWSTA(LAMP,0,0,0,PLAYER)
  497. XC                        !GIVE HIM LAMP.
  498. X    CALL NEWSTA(SWORD,0,0,0,PLAYER)
  499. XC                        !GIVE HIM SWORD.
  500. XC
  501. X    OFLAG1(LAMP)=and((or(OFLAG1(LAMP),LITEBT)), not(ONBT))
  502. X    OFLAG2(LAMP)=or(OFLAG2(LAMP),TCHBT)
  503. X    CFLAG(CEVLNT)=.FALSE.
  504. XC                        !LAMP IS GOOD AS NEW.
  505. X    CTICK(CEVLNT)=350
  506. X    ORLAMP=0
  507. X    OFLAG2(SWORD)=or(OFLAG2(SWORD),TCHBT)
  508. X    SWDACT=.TRUE.
  509. X    SWDSTA=0
  510. XC
  511. X    THFACT=.FALSE.
  512. XC                        !THIEF GONE.
  513. X    ENDGMF=.TRUE.
  514. XC                        !ENDGAME RUNNING.
  515. X    CFLAG(CEVMAT)=.FALSE.
  516. XC                        !MATCHES GONE,
  517. X    CFLAG(CEVCND)=.FALSE.
  518. XC                        !CANDLES GONE.
  519. XC
  520. X    CALL SCRUPD(RVAL(CRYPT))
  521. XC                        !SCORE CRYPT,
  522. X    RVAL(CRYPT)=0
  523. XC                        !BUT ONLY ONCE.
  524. X    F=MOVETO(TSTRS,WINNER)
  525. XC                        !TO TOP OF STAIRS,
  526. X    F=RMDESC(3)
  527. XC                        !AND DESCRIBE.
  528. X    RETURN
  529. XC                        !BAM
  530. XC                        !
  531. XC
  532. XC CEV21--    MIRROR CLOSES.
  533. XC
  534. X21000    MRPSHF=.FALSE.
  535. XC                        !BUTTON IS OUT.
  536. X    MROPNF=.FALSE.
  537. XC                        !MIRROR IS CLOSED.
  538. X    IF(HERE.EQ.MRANT) CALL RSPEAK(728)
  539. XC                        !DESCRIBE BUTTON.
  540. X    IF((HERE.EQ.INMIR).OR.(MRHERE(HERE).EQ.1))
  541. X&        CALL RSPEAK(729)
  542. X    RETURN
  543. XC CEVAPP, PAGE 9
  544. XC
  545. XC CEV22--    DOOR CLOSES.
  546. XC
  547. X22000    IF(WDOPNF) CALL RSPEAK(730)
  548. XC                        !DESCRIBE.
  549. X    WDOPNF=.FALSE.
  550. XC                        !CLOSED.
  551. X    RETURN
  552. XC
  553. XC CEV23--    INQUISITOR'S QUESTION
  554. XC
  555. X23000    IF(AROOM(PLAYER).NE.FDOOR) RETURN
  556. XC                        !IF PLAYER LEFT, DIE.
  557. X    CALL RSPEAK(769)
  558. X    CALL RSPEAK(770+QUESNO)
  559. X    CTICK(CEVINQ)=2
  560. X    RETURN
  561. XC
  562. XC CEV24--    MASTER FOLLOWS
  563. XC
  564. X24000    IF(AROOM(AMASTR).EQ.HERE) RETURN
  565. XC                        !NO MOVEMENT, DONE.
  566. X    IF((HERE.NE.CELL).AND.(HERE.NE.PCELL)) GO TO 24100
  567. X    IF(FOLLWF) CALL RSPEAK(811)
  568. XC                        !WONT GO TO CELLS.
  569. X    FOLLWF=.FALSE.
  570. X    RETURN
  571. XC
  572. X24100    FOLLWF=.TRUE.
  573. XC                        !FOLLOWING.
  574. X    I=812
  575. XC                        !ASSUME CATCHES UP.
  576. X    DO 24200 J=XMIN,XMAX,XMIN
  577. X      IF(FINDXT(J,AROOM(AMASTR)).AND.(XROOM1.EQ.HERE))
  578. X&        I=813
  579. X24200    CONTINUE
  580. X    CALL RSPEAK(I)
  581. X    CALL NEWSTA(MASTER,0,HERE,0,0)
  582. XC                        !MOVE MASTER OBJECT.
  583. X    AROOM(AMASTR)=HERE
  584. XC                        !MOVE MASTER PLAYER.
  585. X    RETURN
  586. XC
  587. X    END
  588. XC LITINT-    LIGHT INTERRUPT PROCESSOR
  589. XC
  590. XC DECLARATIONS
  591. XC
  592. X    SUBROUTINE LITINT(OBJ,CTR,CEV,TICKS,TICKLN)
  593. X    IMPLICIT INTEGER (A-Z)
  594. X    INTEGER TICKS(TICKLN)
  595. X#include "gamestate.h"
  596. X#include "objects.h"
  597. X#include "oflags.h"
  598. X#include "clock.h"
  599. XC
  600. X    CTR=CTR+1
  601. XC                        !ADVANCE STATE CNTR.
  602. X    CTICK(CEV)=TICKS(CTR)
  603. XC                        !RESET INTERRUPT.
  604. X    IF(CTICK(CEV).NE.0) GO TO 100
  605. XC                        !EXPIRED?
  606. X    OFLAG1(OBJ)=and(OFLAG1(OBJ), not(LITEBT+FLAMBT+ONBT))
  607. X    IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
  608. X&        CALL RSPSUB(293,ODESC2(OBJ))
  609. X    RETURN
  610. XC
  611. X100    IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
  612. X&        CALL RSPEAK(TICKS(CTR+(TICKLN/2)))
  613. X    RETURN
  614. XC
  615. X    END
  616. END_OF_clockr.F
  617. if test 12197 -ne `wc -c <clockr.F`; then
  618.     echo shar: \"clockr.F\" unpacked with wrong size!
  619. fi
  620. # end of overwriting check
  621. fi
  622. if test -f dungeon.doc -a "${1}" != "-c" ; then 
  623.   echo shar: Will not over-write existing file \"dungeon.doc\"
  624. else
  625. echo shar: Extracting \"dungeon.doc\" \(22194 characters\)
  626. sed "s/^X//" >dungeon.doc <<'END_OF_dungeon.doc'
  627. XTo:    Dungeon Players
  628. XFrom:    "The Translator"
  629. XSubj:    Game Information
  630. XDate:    8-OCT-80, 6-dec-85
  631. X
  632. X
  633. XThis is the first (and last) source release of the PDP-11 version of 
  634. XDungeon.
  635. X
  636. XPlease note that Dungeon has been superceded by the game ZORK(tm).
  637. XThe following is an extract from the new product announcement for
  638. XZORK in the September, 1980 issue of the RT-11 SIG newsletter:
  639. X
  640. X  "'ZORK:  The Great Underground Empire - Part I' ...was developed
  641. X   by the original authors based on their ZORK (Dungeon) game for
  642. X   the PDP-10.  It features a greatly improved parser;  command
  643. X   input and transcript output files;  SAVEs to any device and
  644. X   file name;  and adaptation to different terminal types,
  645. X   including a status line on VT100s.  Note:  this is not the
  646. X   FORTRAN version that has been available through DECUS.  This
  647. X   version has been completely rewritten to run efficiently on
  648. X   small machines - up to 10 times as fast as the DECUS version.
  649. X
  650. X   ...ZORK runs under RT-ll, HT-ll, or RSTS/E and requires as
  651. X   little as 20K words of memory and a single floppy disk drive.
  652. X   The game package, consisting of an RX01-format diskette and
  653. X   an instruction booklet, is available from Infocom, Inc.,
  654. X   P.O. Box 120, Kendall Station, Cambridge, Ma. 02142."
  655. X
  656. XZORK(tm) is a trademark of Infocom, Inc.  It is available for several
  657. Xpopular personal computers as well as for the PDP-ll.
  658. X
  659. X
  660. X1.  Components
  661. X
  662. XDungeon is a maze-solving game for solitaire play.  It runs on any PDP-11
  663. X(with 28KW of memory or more) or VAX-11.
  664. X
  665. XThe following compile and run information does not apply to the
  666. Xf77/Unix implementation.  See the README file for information on
  667. Xcompilation.
  668. X
  669. XDungeon consists of the following files:
  670. X
  671. X
  672. X    all operating systems
  673. X    ---------------------
  674. X
  675. X    DMAIN.FTN            -program root
  676. X    DGAME.FTN            -main routine
  677. X    DSUB.FTN            -resident subroutines
  678. X    DINIT.FTN            -initialization routine
  679. X    NP.FOR                -parser, part 0
  680. X    NP1.FOR                -parser, part 1
  681. X    NP2.FOR                -parser, part 2
  682. X    NP3.FOR                -parser, part 3
  683. X    GDT.FTN                -game debugging tool
  684. X    VERBS.FTN            -principal verbs
  685. X    OBJCTS.FTN            -principal objects
  686. X    SVERBS.FTN            -simple verbs
  687. X    DVERB1.FTN            -auxiliary verbs, part 1
  688. X    DVERB2.FTN            -auxiliary verbs, part 2
  689. X     all operating systems (continued)
  690. X    ---------------------------------
  691. X
  692. X    ACTORS.FTN            -character processors
  693. X    DEMONS.FTN            -demon processors
  694. X    CLOCKR.FTN            -clock event processors
  695. X    ROOMS.FOR            -room processors
  696. X    NROOMS.FOR            -new room processors
  697. X    SOBJS.FOR            -simple objects
  698. X    NOBJS.FOR            -new objects
  699. X    BALLOP.FOR            -balloon processor
  700. X    LIGHTP.FOR            -light processors
  701. X    VILLNS.FOR            -villain processors
  702. X    DSO1.FOR            -overlaid subroutines, part 1
  703. X    DSO2.FOR            -overlaid subroutines, part 2
  704. X    DSO3.FOR            -overlaid subroutines, part 3
  705. X    DSO4.FOR            -overlaid subroutines, part 4
  706. X    DSO5.FOR            -overlaid subroutines, part 5
  707. X    DSO6.FOR            -overlaid subroutines, part 6
  708. X    DSO7.FOR            -overlaid subroutines, part 7
  709. X    DINDX.DAT            -initialization data base
  710. X    DTEXT.DAT            -main data base [binary file]
  711. X    DUNGEO.DOC            -this file
  712. X
  713. X
  714. X    RT11 only
  715. X    ---------
  716. X
  717. X    RTTIM.FOR            -time subroutine
  718. X    RRND.MAC            -random number generator
  719. X    RTCMP.COM            -compile command file
  720. X    RTBLD.COM            -link command file
  721. X
  722. X
  723. X    RSTS/E only
  724. X    -----------
  725. X
  726. X    RTTIM.FOR            -time subroutine
  727. X    RRND.MAC            -random number generator
  728. X    RSTSCB.CTL            -compile/build batch file
  729. X
  730. X
  731. X    RSX11M, RSX11M+ only
  732. X    --------------------
  733. X
  734. X    RSXTIM.MAC            -time subroutine
  735. X    RRND.MAC            -random number generator
  736. X    RSXCMP.CMD            -compile command file
  737. X    RSXBLD.CMD            -task build command file
  738. X    D.ODL                -overlay descriptor file
  739. X
  740. X
  741. X    VMS only
  742. X    --------
  743. X
  744. X    VMSTIM.FOR            -time subroutine
  745. X    VMSRND.MAC            -random number generator
  746. X    VMSCMP.COM            -compile command file
  747. X    VMSBLD.COM            -link command file
  748. X 2.  Installation Instructions, RT11
  749. X
  750. XBefore starting, please note that:
  751. X
  752. X  - Dungeon requires RT11 V3 or later.
  753. X
  754. X  - Dungeon requires Fortran-IV V2 or later, threaded code option.
  755. X
  756. X  - Dungeon requires 26KW of user memory (runs under SJ monitor only).
  757. X
  758. X  - All files (source and object) must reside on the same disk
  759. X    (at least 2500 disk blocks are needed).
  760. X
  761. X  - Dungeon does not require EIS or floating point.
  762. X
  763. XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
  764. XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
  765. XIf the distribution kit consists of RT11-compatible media, then PIP
  766. Xcan be used to transfer the files.  If the distribution kit consists
  767. Xof DOS-compatible media, then FILEX must be used to transfer the files.
  768. XThe /I switch (image binary) must be used to transfer DTEXT.DAT;  the
  769. X/A (ASCII) switch should be used to transfer the other files.
  770. X
  771. XTo compile Dungeon, issue the following command:
  772. X
  773. X  .@RTCMP(cr)
  774. X
  775. XSeveral of the compilations will produce warning messages, but none
  776. Xshould produce a fatal error.
  777. X
  778. XTo link the compiled sources, issue the following command:
  779. X
  780. X  .@RTBLD(cr)
  781. X
  782. XThe command file assumes that the Fortran-IV object time library has
  783. Xbeen merged into the system library.  If this is not the case, edit
  784. XRTBLD.COM and add switch /LINKLIBRARY:FORLIB.OBJ to the first command
  785. Xline.
  786. X
  787. XIt is now possible to run Dungeon:
  788. X
  789. X  .R DUNGEO(cr)
  790. X
  791. XWhen invoked, Dungeon takes no more than 5-10 seconds to start up.
  792. X
  793. XNotes on the executable program:
  794. X
  795. X  - The only files needed to execute Dungeon are DUNGEO.SAV,
  796. X    DINDX.DAT, and DTEXT.DAT.  All other files can be deleted.
  797. X
  798. X  - Files DINDX.DAT and DTEXT.DAT must reside on logical device SY:
  799. X    (this can be changed with a source edit, see section 8).
  800. X 3.  Installation Instructions, RSTS/E
  801. X
  802. XBefore starting, please note that:
  803. X
  804. X  - Dungeon requires RSTS/E V6C or later.
  805. X
  806. X  - Dungeon requires Fortran-IV V2 or later, threaded code option
  807. X    (operation under Fortran-IV-Plus V2.5 or later will probably
  808. X    work but is not supported).
  809. X
  810. X  - Dungeon requires 28KW of user memory.
  811. X
  812. X  - All files (source and object) must reside in the same user area
  813. X    (at least 2500 disk blocks are needed).
  814. X
  815. X  - Dungeon does not require EIS or floating point.
  816. X
  817. XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
  818. XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
  819. XIf the distribution kit consists of RT11- or DOS-compatible disks,
  820. Xthen FIT can be used to transfer the files.  For example (RT11 disk):
  821. X
  822. X  RUN $FIT(cr)
  823. X  FIT>*.*/RSTS=DK:*.*/RT11(cr)
  824. X  FIT>^Z
  825. X
  826. XIf the distribution kit consists of DOS-compatible magtape, then PIP
  827. Xcan be used to transfer the files, providing that the magtape is
  828. Xassigned as a DOS-label device.  For example:
  829. X
  830. X  ASSIGN MM0:.DOS(cr)
  831. X  RUN $PIP(cr)
  832. X  **.*/AS=MM:*.FTN,*.FOR,*.MAC,*.DOC,*.CTL(cr)
  833. X  **.*/AS=MM:*.CMD,*.COM,*.ODL,DINDX.DAT(cr)
  834. X  **.*/BL=MM:DTEXT.DAT(cr)
  835. X  *^C
  836. X  DEASS MM0:(cr)
  837. X
  838. XTo compile and link Dungeon, submit control file RSTSCB.CTL to the
  839. Xbatch processor:
  840. X
  841. X  SUBMIT RSTSCB.CTL(cr)
  842. X
  843. XSeveral of the compilations will produce warning messages, but none
  844. Xshould produce a fatal error.
  845. X
  846. XIt is now possible to run Dungeon:
  847. X
  848. X  RUN DUNGEO(cr)
  849. X
  850. XWhen invoked, Dungeon takes no more than 5-10 seconds to start up.
  851. X
  852. XNotes on the executable program:
  853. X
  854. X  - The only files needed to execute Dungeon are DUNGEO.SAV,
  855. X    DINDX.DAT, and DTEXT.DAT.  All other files can be deleted.
  856. X
  857. X  - Files DINDX.DAT and DTEXT.DAT must reside in the user's area on
  858. X    logical device SY: (this can be changed with a source edit, see
  859. X    section 8).
  860. X 4.  Installation Instructions, RSX11M and RSX11M+
  861. X
  862. XBefore starting, please note that:
  863. X
  864. X  - Dungeon requires RSX11M V3 (RSX11M+ V1) or later.
  865. X
  866. X  - Dungeon requires Fortran-IV-Plus V2.5 or later (operation under
  867. X    Fortran-IV V2 or later will probably work but is not supported).
  868. X
  869. X  - Dungeon requires a 32KW user partition (mapped systems only).
  870. X
  871. X  - All files (source and object) must reside in the same user area
  872. X    (at least 2500 disk blocks are needed).
  873. X
  874. X  - TKB should invoke BIGTKB.TSK with a large memory increment.
  875. X
  876. X  - The Fortran-IV-Plus object time library must be merged into
  877. X    the system library (SYSLIB.OLB).  Further, the library must
  878. X    be set up to invoke the short error text module ($SHORT) as
  879. X    the default.  Task building with a separate object time library
  880. X    produces numerous errors;  task building with a resident library
  881. X    or the normal error text module produces an oversize task image.
  882. X
  883. X  - Dungeon requires EIS but not floating point.
  884. X
  885. XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
  886. XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
  887. XIf the distribution kit consists of Files-11 compatible media, then
  888. XPIP can be used to transfer the files.  For example:
  889. X
  890. X  >PIP SY:*.*=MM:*.*(cr)            -requires ANSI magtape support
  891. X
  892. XIf the distribution kit consists of DOS- or RT11-compatible media,
  893. Xthen FLX must be used to transfer the files.  The /IM:76. switch
  894. X(image binary fixed length) must be used to transfer DTEXT.DAT;
  895. Xthe /FA switch (formatted ASCII) should be used to transfer the
  896. Xother files.  For example (DOS magtape):
  897. X
  898. X  >FLX(cr)
  899. X  FLX>SY:/RS/FA=MM:*.FTN,*.FOR,*.MAC,*.DOC/DO(cr)
  900. X  FLX>SY:/RS/FA=MM:*.CMD,*.COM,*.ODL,DINDX.DAT/DO(cr)
  901. X  FLX>SY:/RS/IM:76.=MM:DTEXT.DAT/DO(cr)
  902. X  FLX>^Z
  903. X
  904. XTo compile Dungeon, issue the following command:
  905. X
  906. X  >@RSXCMP(cr)
  907. X
  908. XThere should be no error messages.
  909. X
  910. XTo task build the compiled sources, issue the following command:
  911. X
  912. X  >TKB @RSXBLD(cr)
  913. X
  914. XIt is now possible to run Dungeon:
  915. X
  916. X  >RUN DUNGEON(cr)
  917. X
  918. XWhen invoked, Dungeon takes no more than 5-10 seconds to start up.
  919. X If your system maintains a separate Fortran-IV-Plus object time
  920. Xlibrary (F4POTS.OLB), then you must create a local copy of the
  921. Xsystem library with the Fortran-IV-Plus object time library
  922. Xmerged in and the short error text as the default.  The following
  923. Xcommands are an example of how such a local copy could be built:
  924. X
  925. X  >PIP SY:*.*=LB:[1,1]SYSLIB.OLB,F4POTS.OLB(cr)    -copy libraries
  926. X  >LBR(cr)                    -invoke LBR
  927. X  LBR>SHORT.OBJ=F4POTS.OLB/EX:$SHORT(cr)    -extract $SHORT
  928. X  LBR>F4POTS.OLB/DE:$SHORT(cr)            -delete $SHORT
  929. X  LBR>F4POTS.OBJ=F4POTS.OLB/EX(cr)        -extract other modules
  930. X  LBR>SYSLIB.OLB=F4POTS.OBJ(cr)            -insert other modules
  931. X  LBR>SYSLIB.OLB/DG:$ERTXT(cr)            -delete dup entry
  932. X  LBR>SYSLIB.OLB=SHORT.OBJ/RP(cr)        -insert $SHORT
  933. X  LBR>^Z
  934. X  >PIP F4POTS.*;*,SHORT.OBJ;*/DE(cr)
  935. X
  936. XThen edit D.ODL to reference the local library instead of the
  937. Xdefault system library:
  938. X
  939. X  >TEC D.ODL(cr)
  940. X  *FS[1,1]$SY:$EX$$
  941. X
  942. XDungeon can now be task built as described above.
  943. X
  944. XNotes on the executable program:
  945. X
  946. X  - The only files needed to execute Dungeon are DUNGEON.TSK,
  947. X    DINDX.DAT, and DTEXT.DAT.  All other files can be deleted.
  948. X
  949. X  - Files DINDX.DAT and DTEXT.DAT must reside in the user's area on
  950. X    logical device SY: (this can be changed with a source edit, see
  951. X    section 8).
  952. X
  953. X  - Exiting from Dungeon via an MCR ABOrt command instead of the QUIT
  954. X    command will leave file DTEXT.DAT open and locked.  The file must
  955. X    be manually unlocked before the game is next invoked:
  956. X
  957. X    >PIP DTEXT.DAT/UN(cr)
  958. X 5.  Installation Instructions, VMS
  959. X
  960. XBefore starting, please note that:
  961. X
  962. X  - Dungeon requires VMS V1 or later.
  963. X
  964. X  - Dungeon requires VAX Fortran-IV V1 or later.
  965. X
  966. X  - All files (source and object) must reside in the user's area
  967. X    (at least 2500 disk blocks are needed).
  968. X
  969. XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
  970. XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
  971. XIf the distribution kit consists of Files-11 compatible media, then
  972. XCOPY can be used to transfer the files.  For example:
  973. X
  974. X  $ COPY MM:*.* *.*(cr)
  975. X
  976. XIf the distribution kit consists of DOS- or RT11-compatible media,
  977. Xthen FLX must be used to transfer the files.  The /IM:76. switch
  978. X(image binary fixed length) must be used to transfer DTEXT.DAT;
  979. Xthe /FA switch (formatted ASCII) should be used to transfer the
  980. Xother files.  For example (DOS magtape):
  981. X
  982. X  $ MCR FLX(cr)
  983. X  FLX>SY:/RS/FA=MM:*.FTN,*.FOR,*.MAC,*.DOC/DO(cr)
  984. X  FLX>SY:/RS/FA=MM:*.CMD,*.COM,*.ODL,DINDX.DAT/DO(cr)
  985. X  FLX>SY:/RS/IM:76.=MM:DTEXT.DAT/DO(cr)
  986. X  FLX>^Z
  987. X
  988. XTo compile Dungeon, issue the following command:
  989. X
  990. X  $ @VMSCMP(cr)
  991. X
  992. XThere should be no error messages.
  993. X
  994. XTo link the compiled sources, issue the following command:
  995. X
  996. X  $ @VMSBLD(cr)
  997. X
  998. XIt is now possible to run Dungeon:
  999. X
  1000. X  $ RUN DUNGEON(cr)
  1001. X
  1002. XWhen invoked, Dungeon takes no more than 5-10 seconds to start up.
  1003. X
  1004. XNotes on the executable program:
  1005. X
  1006. X  - The only files needed to execute Dungeon are DUNGEON.EXE,
  1007. X    DINDX.DAT, and DTEXT.DAT.  All other files can be deleted.
  1008. X
  1009. X  - Files DINDX.DAT and DTEXT.DAT must reside in the user's area
  1010. X    (this can be changed with a source edit, see section 8).
  1011. X 6.  Warnings and Restrictions
  1012. X
  1013. XFor those familiar with the MDL version of the game on the ARPAnet,
  1014. Xthe following is a list of the major incompatabilties:
  1015. X
  1016. X    -The first six letters of a word are considered
  1017. X     significant, instead of the first five.
  1018. X    -The syntax for TELL, ANSWER, and INCANT is different.
  1019. X    -Compound objects are not recognized.
  1020. X    -Compound commands can be delimited with comma as well
  1021. X     as period.
  1022. X
  1023. XAlso, the palantir, brochure, and dead man problems are not
  1024. Ximplemented.
  1025. X
  1026. X
  1027. X7.  Abstract of Informational Printouts
  1028. X
  1029. XSUMMARY
  1030. X-------
  1031. X
  1032. X            Welcome to Dungeon!
  1033. X
  1034. X   Dungeon is a game of adventure, danger, and low cunning.  In it
  1035. Xyou will explore some of the most amazing territory ever seen by mortal
  1036. Xman.  Hardened adventurers have run screaming from the terrors contained
  1037. Xwithin.
  1038. X
  1039. X   In Dungeon, the intrepid explorer delves into the forgotten secrets
  1040. Xof a lost labyrinth deep in the bowels of the earth, searching for
  1041. Xvast treasures long hidden from prying eyes, treasures guarded by
  1042. Xfearsome monsters and diabolical traps!
  1043. X
  1044. X   No DECsystem should be without one!
  1045. X
  1046. X   Dungeon was created at the Programming Technology Division of the MIT
  1047. XLaboratory for Computer Science by Tim Anderson, Marc Blank, Bruce
  1048. XDaniels, and Dave Lebling.  It was inspired by the Adventure game of
  1049. XCrowther and Woods, and the Dungeons and Dragons game of Gygax
  1050. Xand Arneson.  The original version was written in MDL (alias MUDDLE).
  1051. XThe current version was translated from MDL into FORTRAN IV by
  1052. Xa somewhat paranoid DEC engineer who prefers to remain anonymous.
  1053. X
  1054. X   On-line information may be obtained with the commands HELP and INFO.
  1055. X INFO
  1056. X----
  1057. X
  1058. XWelcome to Dungeon!
  1059. X
  1060. X   You are near a large dungeon, which is reputed to contain vast
  1061. Xquantities of treasure.   Naturally, you wish to acquire some of it.
  1062. XIn order to do so, you must of course remove it from the dungeon.  To
  1063. Xreceive full credit for it, you must deposit it safely in the trophy
  1064. Xcase in the living room of the house.
  1065. X
  1066. X   In addition to valuables, the dungeon contains various objects
  1067. Xwhich may or may not be useful in your attempt to get rich.  You may
  1068. Xneed sources of light, since dungeons are often dark, and weapons,
  1069. Xsince dungeons often have unfriendly things wandering about.  Reading
  1070. Xmaterial is scattered around the dungeon as well;  some of it
  1071. Xis rumored to be useful.
  1072. X
  1073. X   To determine how successful you have been, a score is kept.
  1074. XWhen you find a valuable object and pick it up, you receive a
  1075. Xcertain number of points, which depends on the difficulty of finding
  1076. Xthe object.  You receive extra points for transporting the treasure
  1077. Xsafely to the living room and placing it in the trophy case.  In
  1078. Xaddition, some particularly interesting rooms have a value associated
  1079. Xwith visiting them.  The only penalty is for getting yourself killed,
  1080. Xwhich you may do only twice.
  1081. X
  1082. X   Of special note is a thief (always carrying a large bag) who
  1083. Xlikes to wander around in the dungeon (he has never been seen by the
  1084. Xlight of day).  He likes to take things.  Since he steals for pleasure
  1085. Xrather than profit and is somewhat sadistic, he only takes things which
  1086. Xyou have seen.  Although he prefers valuables, sometimes in his haste
  1087. Xhe may take something which is worthless.  From time to time, he examines
  1088. Xhis take and discards objects which he doesn't like.  He may occas-
  1089. Xionally stop in a room you are visiting, but more often he just wanders
  1090. Xthrough and rips you off (he is a skilled pickpocket).
  1091. X
  1092. XHELP
  1093. X----
  1094. X
  1095. XUseful commands:
  1096. X
  1097. X   The 'BRIEF' command suppresses printing of long room descriptions
  1098. Xfor rooms which have been visited.  The 'SUPERBRIEF' command suppresses
  1099. Xprinting of long room descriptions for all rooms.  The 'VERBOSE'
  1100. Xcommand restores long descriptions.
  1101. X   The 'INFO' command prints information which might give some idea
  1102. Xof what the game is about.
  1103. X   The 'QUIT' command prints your score and asks whether you wish
  1104. Xto continue playing.
  1105. X   The 'SAVE' command saves the state of the game for later continuation.
  1106. X   The 'RESTORE' command restores a saved game.
  1107. X   The 'INVENTORY' command lists the objects in your possession.
  1108. X   The 'LOOK' command prints a description of your surroundings.
  1109. X   The 'SCORE' command prints your current score and ranking.
  1110. X   The 'TIME' command tells you how long you have been playing.
  1111. X   The 'DIAGNOSE' command reports on your injuries, if any.
  1112. X Command abbreviations:
  1113. X
  1114. X   The 'INVENTORY' command may be abbreviated 'I'.
  1115. X   The 'LOOK' command may be abbreviated 'L'.
  1116. X   The 'QUIT' command may be abbreviated 'Q'.
  1117. X
  1118. XContainment:
  1119. X
  1120. X   Some objects can contain other objects.  Many such containers can
  1121. Xbe opened and closed.  The rest are always open.   They may or may
  1122. Xnot be transparent.  For you to access (e.g., take) an object
  1123. Xwhich is in a container, the container must be open.  For you
  1124. Xto see such an object, the container must be either open or
  1125. Xtransparent.  Containers have a capacity, and objects have sizes;
  1126. Xthe number of objects which will fit therefore depends on their
  1127. Xsizes.  You may put any object you have access to (it need not be
  1128. Xin your hands) into any other object.  At some point, the program
  1129. Xwill attempt to pick it up if you don't already have it, which
  1130. Xprocess may fail if you're carrying too much.  Although containers
  1131. Xcan contain other containers, the program doesn't access more than
  1132. Xone level down.
  1133. X
  1134. XFighting:
  1135. X
  1136. X   Occupants of the dungeon will, as a rule, fight back when
  1137. Xattacked.  In some cases, they may attack even if unprovoked.
  1138. XUseful verbs here are 'ATTACK <villain> WITH <weapon>', 'KILL',
  1139. Xetc.  Knife-throwing may or may not be useful.  You have a
  1140. Xfighting strength which varies with time.  Being in a fight,
  1141. Xgetting killed, and being injured all lower this strength.
  1142. XStrength is regained with time.  Thus, it is not a good idea to
  1143. Xfight someone immediately after being killed.  Other details
  1144. Xshould become apparent after a few melees or deaths.
  1145. X
  1146. XCommand parser:
  1147. X
  1148. X   A command is one line of text terminated by a carriage return.
  1149. XFor reasons of simplicity, all words are distinguished by their
  1150. Xfirst six letters.  All others are ignored.  For example, typing
  1151. X'DISASSEMBLE THE ENCYCLOPEDIA' is not only meaningless, it also
  1152. Xcreates excess effort for your fingers.  Note that this trunca-
  1153. Xtion may produce ambiguities in the intepretation of longer words.
  1154. X[Also note that upper and lower case are equivalent.]
  1155. X
  1156. X   You are dealing with a fairly stupid parser, which understands
  1157. Xthe following types of things--
  1158. X
  1159. X   Actions:
  1160. X    Among the more obvious of these, such as TAKE, PUT, DROP, etc.
  1161. X    Fairly general forms of these may be used, such as PICK UP,
  1162. X    PUT DOWN, etc.
  1163. X
  1164. X   Directions:
  1165. X    NORTH, SOUTH, UP, DOWN, etc. and their various abbreviations.
  1166. X    Other more obscure directions (LAND, CROSS) are appropriate in
  1167. X    only certain situations.
  1168. X    Objects:
  1169. X    Most objects have names and can be referenced by them.
  1170. X
  1171. X   Adjectives:
  1172. X    Some adjectives are understood and required when there are
  1173. X    two objects which can be referenced with the same 'name' (e.g.,
  1174. X    DOORs, BUTTONs).
  1175. X
  1176. X   Prepositions:
  1177. X    It may be necessary in some cases to include prepositions, but
  1178. X    the parser attempts to handle cases which aren't ambiguous
  1179. X    without.  Thus 'GIVE CAR TO DEMON' will work, as will 'GIVE DEMON
  1180. X    CAR'.  'GIVE CAR DEMON' probably won't do anything interesting.
  1181. X    When a preposition is used, it should be appropriate;  'GIVE CAR
  1182. X    WITH DEMON' won't parse.
  1183. X
  1184. X   Sentences:
  1185. X    The parser understands a reasonable number of syntactic construc-
  1186. X    tions.  In particular, multiple commands (separated by commas)
  1187. X    can be placed on the same line.
  1188. X
  1189. X   Ambiguity:
  1190. X    The parser tries to be clever about what to do in the case of
  1191. X    actions which require objects that are not explicitly specified.
  1192. X    If there is only one possible object, the parser will assume
  1193. X    that it should be used.  Otherwise, the parser will ask.
  1194. X    Most questions asked by the parser can be answered.
  1195. X 8.  Source Notes
  1196. X
  1197. XA few notes for source hackers.
  1198. X
  1199. X- The initialization module (DINIT.FTN) includes an access protection
  1200. X  function PROTCT.  If PROTCT returns a value of .TRUE., the game is
  1201. X  permitted to start;  if PROTCT returns .FALSE., the game is
  1202. X  terminated with a suitably nasty message.  At present, PROTCT is a
  1203. X  dummy routine and always returns .TRUE.;  by tailoring PROTCT,
  1204. X  access to the game can be restricted to certain hours or users.
  1205. X
  1206. X- The data base OPEN and READ statements are in the initialization
  1207. X  module (DINIT.FTN).  The data base file names are simply "DINDX.DAT"
  1208. X  and "DTEXT.DAT".  These may be freely changed to include logical
  1209. X  device names, UIC's, etc.  Thus, it is possible to place the data
  1210. X  base files on different devices, in a fixed UIC, etc.
  1211. X
  1212. X- Converting the game to another processor is not a straightforward
  1213. X  procedure.  The game makes heavy use of extended and/or
  1214. X  idiosynchratic features of PDP-11 Fortran.  Particular nasties
  1215. X  include the following:
  1216. X
  1217. X  > The game vocabulary is stored in Radix-50 notation.
  1218. X  > [F77 version has converted these to ints.]
  1219. X
  1220. X  > The game uses the extended I/O commands OPEN and CLOSE.
  1221. X
  1222. X  > The game uses LOGICAL*1 variables for character strings.
  1223. X  > [F77 version uses CHARACTER.]
  1224. X
  1225. X  > The game uses logical operators on integers for bitwise binary
  1226. X    operations.
  1227. X  > [F77 version uses the functions and() and or() and not() where
  1228. X    necessary, as well as standard fortran .and., .or., etc.]
  1229. X
  1230. X  > The game treats certain arrays and variables as unsigned
  1231. X    16-bit integers (integer overflow may occur).
  1232. X  > [F77 vax version uses 32-bit ints except in the subroutine
  1233. X    that reads the text file, where they are declared as 16-bits.
  1234. X    The F77 pdp version uses the -I2 compile flag force 16-bit
  1235. X    ints and logicals.]
  1236. X
  1237. X  In general, the game was implemented to fit in memory, not to be
  1238. X  transported.  You're on your own, friend!
  1239. END_OF_dungeon.doc
  1240. if test 22194 -ne `wc -c <dungeon.doc`; then
  1241.     echo shar: \"dungeon.doc\" unpacked with wrong size!
  1242. fi
  1243. # end of overwriting check
  1244. fi
  1245. if test -f verbs.F -a "${1}" != "-c" ; then 
  1246.   echo shar: Will not over-write existing file \"verbs.F\"
  1247. else
  1248. echo shar: Extracting \"verbs.F\" \(17427 characters\)
  1249. sed "s/^X//" >verbs.F <<'END_OF_verbs.F'
  1250. XC VAPPLI- MAIN VERB PROCESSING ROUTINE
  1251. XC
  1252. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  1253. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  1254. XC WRITTEN BY R. M. SUPNIK
  1255. XC
  1256. XC DECLARATIONS
  1257. XC
  1258. X    LOGICAL FUNCTION VAPPLI(RI)
  1259. X    IMPLICIT INTEGER (A-Z)
  1260. X    LOGICAL LIT,OBJACT
  1261. X    LOGICAL QEMPTY,RMDESC,CLOCKD
  1262. X    LOGICAL QOPEN,EDIBLE,DRKBLE
  1263. X    LOGICAL TAKE,PUT,DROP,WALK
  1264. X    LOGICAL QHERE,SVERBS,FINDXT,OAPPLI,F
  1265. X#include "parser.h"
  1266. X#include "gamestate.h"
  1267. X#include "state.h"
  1268. XC
  1269. X    COMMON /STAR/ MBASE,STRBIT
  1270. X#include "rooms.h"
  1271. X#include "rflag.h"
  1272. X#include "rindex.h"
  1273. X#include "xsrch.h"
  1274. X#include "objects.h"
  1275. X#include "oflags.h"
  1276. X#include "oindex.h"
  1277. X#include "advers.h"
  1278. X#include "verbs.h"
  1279. XC
  1280. XC FUNCTIONS AND DATA
  1281. XC
  1282. X    QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  1283. X    EDIBLE(R)=and(OFLAG1(R),FOODBT).NE.0
  1284. X    DRKBLE(R)=and(OFLAG1(R),DRNKBT).NE.0
  1285. X    DATA MXNOP/39/,MXSMP/99/
  1286. XC VAPPLI, PAGE 2
  1287. XC
  1288. X    VAPPLI=.TRUE.
  1289. XC                        !ASSUME WINS.
  1290. XC
  1291. X    IF(PRSO.GT.220) GO TO 5
  1292. XC
  1293. X    IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  1294. XC                        !SET UP DESCRIPTORS.
  1295. X5    IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  1296. X    AV=AVEHIC(WINNER)
  1297. X    RMK=372+RND(6)
  1298. XC                        !REMARK FOR HACK-HACKS.
  1299. XC
  1300. X    IF(RI.EQ.0) GO TO 10
  1301. XC                        !ZERO IS FALSE.
  1302. X    IF(RI.LE.MXNOP) RETURN
  1303. XC                        !NOP?
  1304. X    IF(RI.LE.MXSMP) GO TO 100
  1305. XC                        !SIMPLE VERB?
  1306. X    GO TO (18000,20000,
  1307. X&           22000,23000,24000,25000,26000,27000,28000,29000,30000,
  1308. X&     31000,32000,33000,34000,35000,36000,      38000,39000,40000,
  1309. X&     41000,42000,43000,44000,45000,46000,47000,48000,49000,50000,
  1310. X&     51000,52000,53000,      55000,56000,      58000,59000,60000,
  1311. X&                 63000,64000,65000,66000,      68000,69000,70000,
  1312. X&     71000,72000,73000,74000,            77000,78000,
  1313. X&     80000,81000,82000,83000,84000,85000,86000,87000,88000),
  1314. X&        (RI-MXSMP)
  1315. X    CALL BUG(7,RI)
  1316. XC
  1317. XC ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE.
  1318. XC
  1319. X10    VAPPLI=.FALSE.
  1320. XC                        !LOSE.
  1321. X    RETURN
  1322. XC
  1323. XC SIMPLE VERBS ARE HANDLED EXTERNALLY.
  1324. XC
  1325. X100    VAPPLI=SVERBS(RI)
  1326. X    RETURN
  1327. XC VAPPLI, PAGE 3
  1328. XC
  1329. XC V100--    READ.  OUR FIRST REAL VERB.
  1330. XC
  1331. X18000    IF(LIT(HERE)) GO TO 18100
  1332. XC                        !ROOM LIT?
  1333. X    CALL RSPEAK(356)
  1334. XC                        !NO, CANT READ.
  1335. X    RETURN
  1336. XC
  1337. X18100    IF(PRSI.EQ.0) GO TO 18200
  1338. XC                        !READ THROUGH OBJ?
  1339. X    IF(and(OFLAG1(PRSI),TRANBT).NE.0) GO TO 18200
  1340. X    CALL RSPSUB(357,ODI2)
  1341. XC                        !NOT TRANSPARENT.
  1342. X    RETURN
  1343. XC
  1344. X18200    IF(and(OFLAG1(PRSO),READBT).NE.0) GO TO 18300
  1345. X    CALL RSPSUB(358,ODO2)
  1346. XC                        !NOT READABLE.
  1347. X    RETURN
  1348. XC
  1349. X18300    IF(.NOT.OBJACT(X)) CALL RSPEAK(OREAD(PRSO))
  1350. X    RETURN
  1351. XC
  1352. XC V101--    MELT.  UNLESS OBJECT HANDLES, JOKE.
  1353. XC
  1354. X20000    IF(.NOT.OBJACT(X)) CALL RSPSUB(361,ODO2)
  1355. X    RETURN
  1356. XC
  1357. XC V102--    INFLATE.  WORKS ONLY WITH BOATS.
  1358. XC
  1359. X22000    IF(.NOT.OBJACT(X)) CALL RSPEAK(368)
  1360. XC                        !OBJ HANDLE?
  1361. X    RETURN
  1362. XC
  1363. XC V103--    DEFLATE.
  1364. XC
  1365. X23000    IF(.NOT.OBJACT(X)) CALL RSPEAK(369)
  1366. XC                        !OBJ HANDLE?
  1367. X    RETURN
  1368. XC VAPPLI, PAGE 4
  1369. XC
  1370. XC V104--    ALARM.  IF SLEEPING, WAKE HIM UP.
  1371. XC
  1372. X24000    IF(and(OFLAG2(PRSO),SLEPBT).EQ.0) GO TO 24100
  1373. X    VAPPLI=OBJACT(X)
  1374. XC                        !SLEEPING, LET OBJ DO.
  1375. X    RETURN
  1376. XC
  1377. X24100    CALL RSPSUB(370,ODO2)
  1378. XC                        !JOKE.
  1379. X    RETURN
  1380. XC
  1381. XC V105--    EXORCISE.  OBJECTS HANDLE.
  1382. XC
  1383. X25000    F=OBJACT(X)
  1384. XC                        !OBJECTS HANDLE.
  1385. X    RETURN
  1386. XC
  1387. XC V106--    PLUG.  LET OBJECTS HANDLE.
  1388. XC
  1389. X26000    IF(.NOT.OBJACT(X)) CALL RSPEAK(371)
  1390. X    RETURN
  1391. XC
  1392. XC V107--    KICK.  IF OBJECT IGNORES, JOKE.
  1393. XC
  1394. X27000    IF(.NOT.OBJACT(X)) CALL RSPSB2(378,ODO2,RMK)
  1395. X    RETURN
  1396. XC
  1397. XC V108--    WAVE.  SAME.
  1398. XC
  1399. X28000    IF(.NOT.OBJACT(X)) CALL RSPSB2(379,ODO2,RMK)
  1400. X    RETURN
  1401. XC
  1402. XC V109,V110--    RAISE, LOWER.  SAME.
  1403. XC
  1404. X29000    CONTINUE
  1405. X30000    IF(.NOT.OBJACT(X)) CALL RSPSB2(380,ODO2,RMK)
  1406. X    RETURN
  1407. XC
  1408. XC V111--    RUB.  SAME.
  1409. XC
  1410. X31000    IF(.NOT.OBJACT(X)) CALL RSPSB2(381,ODO2,RMK)
  1411. X    RETURN
  1412. XC
  1413. XC V112--    PUSH.  SAME.
  1414. XC
  1415. X32000    IF(.NOT.OBJACT(X)) CALL RSPSB2(382,ODO2,RMK)
  1416. X    RETURN
  1417. XC VAPPLI, PAGE 5
  1418. XC
  1419. XC V113--    UNTIE.  IF OBJECT IGNORES, JOKE.
  1420. XC
  1421. X33000    IF(OBJACT(X)) RETURN
  1422. XC                        !OBJECT HANDLE?
  1423. X    I=383
  1424. XC                        !NO, NOT TIED.
  1425. X    IF(and(OFLAG2(PRSO),TIEBT).EQ.0) I=384
  1426. X    CALL RSPEAK(I)
  1427. X    RETURN
  1428. XC
  1429. XC V114--    TIE.  NEVER REALLY WORKS.
  1430. XC
  1431. X34000    IF(and(OFLAG2(PRSO),TIEBT).NE.0) GO TO 34100
  1432. X    CALL RSPEAK(385)
  1433. XC                        !NOT TIEABLE.
  1434. X    RETURN
  1435. XC
  1436. X34100    IF(.NOT.OBJACT(X)) CALL RSPSUB(386,ODO2)
  1437. XC                        !JOKE.
  1438. X    RETURN
  1439. XC
  1440. XC V115--    TIE UP.  NEVER REALLY WORKS.
  1441. XC
  1442. X35000    IF(and(OFLAG2(PRSI),TIEBT).NE.0) GO TO 35100
  1443. X    CALL RSPSUB(387,ODO2)
  1444. XC                        !NOT TIEABLE.
  1445. X    RETURN
  1446. XC
  1447. X35100    I=388
  1448. XC                        !ASSUME VILLAIN.
  1449. X    IF(and(OFLAG2(PRSO),VILLBT).EQ.0) I=389
  1450. X    CALL RSPSUB(I,ODO2)
  1451. XC                        !JOKE.
  1452. X    RETURN
  1453. XC
  1454. XC V116--    TURN.  OBJECT MUST HANDLE.
  1455. XC
  1456. X36000    IF(and(OFLAG1(PRSO),TURNBT).NE.0) GO TO 36100
  1457. X    CALL RSPEAK(390)
  1458. XC                        !NOT TURNABLE.
  1459. X    RETURN
  1460. XC
  1461. X36100    IF(and(OFLAG1(PRSI),TOOLBT).NE.0) GO TO 36200
  1462. X    CALL RSPSUB(391,ODI2)
  1463. XC                        !NOT A TOOL.
  1464. X    RETURN
  1465. XC
  1466. X36200    VAPPLI=OBJACT(X)
  1467. XC                        !LET OBJECT HANDLE.
  1468. X    RETURN
  1469. XC
  1470. XC V117--    BREATHE.  BECOMES INFLATE WITH LUNGS.
  1471. XC
  1472. X38000    PRSA=INFLAW
  1473. X    PRSI=LUNGS
  1474. X    GO TO 22000
  1475. XC                        !HANDLE LIKE INFLATE.
  1476. XC
  1477. XC V118--    KNOCK.  MOSTLY JOKE.
  1478. XC
  1479. X39000    IF(OBJACT(X)) RETURN
  1480. XC                        !OBJ HANDLE?
  1481. X    I=394
  1482. XC                        !JOKE FOR DOOR.
  1483. X    IF(and(OFLAG1(PRSO),DOORBT).EQ.0) I=395
  1484. X    CALL RSPSUB(I,ODO2)
  1485. XC                        !JOKE FOR NONDOORS TOO.
  1486. X    RETURN
  1487. XC
  1488. XC V119--    LOOK.
  1489. XC
  1490. X40000    IF(PRSO.NE.0) GO TO 41500
  1491. XC                        !SOMETHING TO LOOK AT?
  1492. X    VAPPLI=RMDESC(3)
  1493. XC                        !HANDLED BY RMDESC.
  1494. X    RETURN
  1495. XC
  1496. XC V120--    EXAMINE.
  1497. XC
  1498. X41000    IF(PRSO.NE.0) GO TO 41500
  1499. XC                        !SOMETHING TO EXAMINE?
  1500. X    VAPPLI=RMDESC(0)
  1501. XC                        !HANDLED BY RMDESC.
  1502. X    RETURN
  1503. XC
  1504. X41500    IF(OBJACT(X)) RETURN
  1505. XC                        !OBJ HANDLE?
  1506. X    I=OREAD(PRSO)
  1507. XC                        !GET READING MATERIAL.
  1508. X    IF(I.NE.0) CALL RSPEAK(I)
  1509. XC                        !OUTPUT IF THERE,
  1510. X    IF(I.EQ.0) CALL RSPSUB(429,ODO2)
  1511. XC                        !OTHERWISE DEFAULT.
  1512. X    PRSA=FOOW
  1513. XC                        !DEFUSE ROOM PROCESSORS.
  1514. X    RETURN
  1515. XC
  1516. XC V121--    SHAKE.  IF HOLLOW OBJECT, SOME ACTION.
  1517. XC
  1518. X42000    IF(OBJACT(X)) RETURN
  1519. XC                        !OBJECT HANDLE?
  1520. X    IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 42100
  1521. X    CALL RSPEAK(371)
  1522. XC                        !JOKE FOR VILLAINS.
  1523. X    RETURN
  1524. XC
  1525. X42100    IF(QEMPTY(PRSO).OR.(and(OFLAG1(PRSO),TAKEBT).EQ.0))
  1526. X&        GO TO 10
  1527. X    IF(QOPEN(PRSO)) GO TO 42300
  1528. XC                        !OPEN?  SPILL.
  1529. X    CALL RSPSUB(396,ODO2)
  1530. XC                        !NO, DESCRIBE NOISE.
  1531. X    RETURN
  1532. XC
  1533. X42300    CALL RSPSUB(397,ODO2)
  1534. XC                        !SPILL THE WORKS.
  1535. X    DO 42500 I=1,OLNT
  1536. XC                        !SPILL CONTENTS.
  1537. X      IF(OCAN(I).NE.PRSO) GO TO 42500
  1538. XC                        !INSIDE?
  1539. X      OFLAG2(I)=or(OFLAG2(I),TCHBT)
  1540. X      IF(AV.EQ.0) GO TO 42400
  1541. XC                        !IN VEHICLE?
  1542. X      CALL NEWSTA(I,0,0,AV,0)
  1543. XC                        !YES, SPILL IN THERE.
  1544. X      GO TO 42500
  1545. XC
  1546. X42400      CALL NEWSTA(I,0,HERE,0,0)
  1547. XC                        !NO, SPILL ON FLOOR,
  1548. X      IF(I.EQ.WATER) CALL NEWSTA(I,133,0,0,0)
  1549. XC                        !BUT WATER DISAPPEARS.
  1550. X42500    CONTINUE
  1551. X    RETURN
  1552. XC
  1553. XC V122--    MOVE.  MOSTLY JOKES.
  1554. XC
  1555. X43000    IF(OBJACT(X)) RETURN
  1556. XC                        !OBJ HANDLE?
  1557. X    I=398
  1558. XC                        !ASSUME NOT HERE.
  1559. X    IF(QHERE(PRSO,HERE)) I=399
  1560. X    CALL RSPSUB(I,ODO2)
  1561. XC                        !JOKE.
  1562. X    RETURN
  1563. XC VAPPLI, PAGE 6
  1564. XC
  1565. XC V123--    TURN ON.
  1566. XC
  1567. X44000    F=LIT(HERE)
  1568. XC                        !RECORD IF LIT.
  1569. X    IF(OBJACT(X)) GO TO 44300
  1570. XC                        !OBJ HANDLE?
  1571. X    IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND.
  1572. X&        (OADV(PRSO).EQ.WINNER)) GO TO 44100
  1573. X    CALL RSPEAK(400)
  1574. XC                        !CANT DO IT.
  1575. X    RETURN
  1576. XC
  1577. X44100    IF(and(OFLAG1(PRSO),ONBT).EQ.0) GO TO 44200
  1578. X    CALL RSPEAK(401)
  1579. XC                        !ALREADY ON.
  1580. X    RETURN
  1581. XC
  1582. X44200    OFLAG1(PRSO)=or(OFLAG1(PRSO),ONBT)
  1583. X    CALL RSPSUB(404,ODO2)
  1584. X44300    IF(.NOT.F .AND.LIT(HERE)) F=RMDESC(0)
  1585. XC                        !ROOM NEWLY LIT.
  1586. X    RETURN
  1587. XC
  1588. XC V124--    TURN OFF.
  1589. XC
  1590. X45000    IF(OBJACT(X)) GO TO 45300
  1591. XC                        !OBJ HANDLE?
  1592. X    IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND.
  1593. X&        (OADV(PRSO).EQ.WINNER)) GO TO 45100
  1594. X    CALL RSPEAK(402)
  1595. XC                        !CANT DO IT.
  1596. X    RETURN
  1597. XC
  1598. X45100    IF(and(OFLAG1(PRSO),ONBT).NE.0) GO TO 45200
  1599. X    CALL RSPEAK(403)
  1600. XC                        !ALREADY OFF.
  1601. X    RETURN
  1602. XC
  1603. X45200    OFLAG1(PRSO)=and(OFLAG1(PRSO), not(ONBT))
  1604. X    CALL RSPSUB(405,ODO2)
  1605. X45300    IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
  1606. XC                        !MAY BE DARK.
  1607. X    RETURN
  1608. XC
  1609. XC V125--    OPEN.  A FINE MESS.
  1610. XC
  1611. X46000    IF(OBJACT(X)) RETURN
  1612. XC                        !OBJ HANDLE?
  1613. X    IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 46100
  1614. X46050    CALL RSPSUB(407,ODO2)
  1615. XC                        !NOT OPENABLE.
  1616. X    RETURN
  1617. XC
  1618. X46100    IF(OCAPAC(PRSO).NE.0) GO TO 46200
  1619. X    CALL RSPSUB(408,ODO2)
  1620. XC                        !NOT OPENABLE.
  1621. X    RETURN
  1622. XC
  1623. X46200    IF(.NOT.QOPEN(PRSO)) GO TO 46225
  1624. X    CALL RSPEAK(412)
  1625. XC                        !ALREADY OPEN.
  1626. X    RETURN
  1627. XC
  1628. X46225    OFLAG2(PRSO)=or(OFLAG2(PRSO),OPENBT)
  1629. X    IF((and(OFLAG1(PRSO),TRANBT).NE.0).OR.QEMPTY(PRSO))
  1630. X&        GO TO 46300
  1631. X    CALL PRINCO(PRSO,410)
  1632. XC                        !PRINT CONTENTS.
  1633. X    RETURN
  1634. XC
  1635. X46300    CALL RSPEAK(409)
  1636. XC                        !DONE
  1637. X    RETURN
  1638. XC
  1639. XC V126--    CLOSE.
  1640. XC
  1641. X47000    IF(OBJACT(X)) RETURN
  1642. XC                        !OBJ HANDLE?
  1643. X    IF(and(OFLAG1(PRSO),CONTBT).EQ.0) GO TO 46050
  1644. X    IF(OCAPAC(PRSO).NE.0) GO TO 47100
  1645. X    CALL RSPSUB(411,ODO2)
  1646. XC                        !NOT CLOSABLE.
  1647. X    RETURN
  1648. XC
  1649. X47100    IF(QOPEN(PRSO)) GO TO 47200
  1650. XC                        !OPEN?
  1651. X    CALL RSPEAK(413)
  1652. XC                        !NO, JOKE.
  1653. X    RETURN
  1654. XC
  1655. X47200    OFLAG2(PRSO)=and(OFLAG2(PRSO), not(OPENBT))
  1656. X    CALL RSPEAK(414)
  1657. XC                        !DONE.
  1658. X    RETURN
  1659. XC VAPPLI, PAGE 7
  1660. XC
  1661. XC V127--    FIND.  BIG MEGILLA.
  1662. XC
  1663. X48000    IF(OBJACT(X)) RETURN
  1664. XC                        !OBJ HANDLE?
  1665. X    I=415
  1666. XC                        !DEFAULT CASE.
  1667. X    IF(QHERE(PRSO,HERE)) GO TO 48300
  1668. XC                        !IN ROOM?
  1669. X    IF(OADV(PRSO).EQ.WINNER) GO TO 48200
  1670. XC                        !ON WINNER?
  1671. X    J=OCAN(PRSO)
  1672. XC                        !DOWN ONE LEVEL.
  1673. X    IF(J.EQ.0) GO TO 10
  1674. X    IF(((and(OFLAG1(J),TRANBT).EQ.0).AND.
  1675. X&     (.NOT.QOPEN(J).OR.(and(OFLAG1(J),(DOORBT+CONTBT)).EQ.0))))
  1676. X&        GO TO 10
  1677. X    I=417
  1678. XC                        !ASSUME IN ROOM.
  1679. X    IF(QHERE(J,HERE)) GO TO 48100
  1680. X    IF(OADV(J).NE.WINNER) GO TO 10
  1681. XC                        !NOT HERE OR ON PERSON.
  1682. X    I=418
  1683. X48100    CALL RSPSUB(I,ODESC2(J))
  1684. XC                        !DESCRIBE FINDINGS.
  1685. X    RETURN
  1686. XC
  1687. X48200    I=416
  1688. X48300    CALL RSPSUB(I,ODO2)
  1689. XC                        !DESCRIBE FINDINGS.
  1690. X    RETURN
  1691. XC
  1692. XC V128--    WAIT.  RUN CLOCK DEMON.
  1693. XC
  1694. X49000    CALL RSPEAK(419)
  1695. XC                        !TIME PASSES.
  1696. X    DO 49100 I=1,3
  1697. X      IF(CLOCKD(X)) RETURN
  1698. X49100    CONTINUE
  1699. X    RETURN
  1700. XC
  1701. XC V129--    SPIN.
  1702. XC V159--    TURN TO.
  1703. XC
  1704. X50000    CONTINUE
  1705. X88000    IF(.NOT.OBJACT(X)) CALL RSPEAK(663)
  1706. XC                        !IF NOT OBJ, JOKE.
  1707. X    RETURN
  1708. XC
  1709. XC V130--    BOARD.  WORKS WITH VEHICLES.
  1710. XC
  1711. X51000    IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 51100
  1712. X    CALL RSPSUB(421,ODO2)
  1713. XC                        !NOT VEHICLE, JOKE.
  1714. X    RETURN
  1715. XC
  1716. X51100    IF(QHERE(PRSO,HERE)) GO TO 51200
  1717. XC                        !HERE?
  1718. X    CALL RSPSUB(420,ODO2)
  1719. XC                        !NO, JOKE.
  1720. X    RETURN
  1721. XC
  1722. X51200    IF(AV.EQ.0) GO TO 51300
  1723. XC                        !ALREADY GOT ONE?
  1724. X    CALL RSPSUB(422,ODO2)
  1725. XC                        !YES, JOKE.
  1726. X    RETURN
  1727. XC
  1728. X51300    IF(OBJACT(X)) RETURN
  1729. XC                        !OBJ HANDLE?
  1730. X    CALL RSPSUB(423,ODO2)
  1731. XC                        !DESCRIBE.
  1732. X    AVEHIC(WINNER)=PRSO
  1733. X    IF(WINNER.NE.PLAYER) OCAN(AOBJ(WINNER))=PRSO
  1734. X    RETURN
  1735. XC
  1736. XC V131--    DISEMBARK.
  1737. XC
  1738. X52000    IF(AV.EQ.PRSO) GO TO 52100
  1739. XC                        !FROM VEHICLE?
  1740. X    CALL RSPEAK(424)
  1741. XC                        !NO, JOKE.
  1742. X    RETURN
  1743. XC
  1744. X52100    IF(OBJACT(X)) RETURN
  1745. XC                        !OBJ HANDLE?
  1746. X    IF(and(RFLAG(HERE),RLAND).NE.0) GO TO 52200
  1747. X    CALL RSPEAK(425)
  1748. XC                        !NOT ON LAND.
  1749. X    RETURN
  1750. XC
  1751. X52200    AVEHIC(WINNER)=0
  1752. X    CALL RSPEAK(426)
  1753. X    IF(WINNER.NE.PLAYER) CALL NEWSTA(AOBJ(WINNER),0,HERE,0,0)
  1754. X    RETURN
  1755. XC
  1756. XC V132--    TAKE.  HANDLED EXTERNALLY.
  1757. XC
  1758. X53000    VAPPLI=TAKE(.TRUE.)
  1759. X    RETURN
  1760. XC
  1761. XC V133--    INVENTORY.  PROCESSED EXTERNALLY.
  1762. XC
  1763. X55000    CALL INVENT(WINNER)
  1764. X    RETURN
  1765. XC VAPPLI, PAGE 8
  1766. XC
  1767. XC V134--    FILL.  STRANGE DOINGS WITH WATER.
  1768. XC
  1769. X56000    IF(PRSI.NE.0) GO TO 56050
  1770. XC                        !ANY OBJ SPECIFIED?
  1771. X    IF(and(RFLAG(HERE),(RWATER+RFILL)).NE.0) GO TO 56025
  1772. X    CALL RSPEAK(516)
  1773. XC                        !NOTHING TO FILL WITH.
  1774. X    PRSWON=.FALSE.
  1775. XC                        !YOU LOSE.
  1776. X    RETURN
  1777. XC
  1778. X56025    PRSI=GWATE
  1779. XC                        !USE GLOBAL WATER.
  1780. X56050    IF(OBJACT(X)) RETURN
  1781. XC                        !OBJ HANDLE?
  1782. X    IF((PRSI.NE.GWATE).AND.(PRSI.NE.WATER))
  1783. X&        CALL RSPSB2(444,ODI2,ODO2)
  1784. X    RETURN
  1785. XC
  1786. XC V135,V136--    EAT/DRINK
  1787. XC
  1788. X58000    CONTINUE
  1789. X59000    IF(OBJACT(X)) RETURN
  1790. XC                        !OBJ HANDLE?
  1791. X    IF(PRSO.EQ.GWATE) GO TO 59500
  1792. XC                        !DRINK GLOBAL WATER?
  1793. X    IF(.NOT.EDIBLE(PRSO)) GO TO 59400
  1794. XC                        !EDIBLE?
  1795. X    IF(OADV(PRSO).EQ.WINNER) GO TO 59200
  1796. XC                        !YES, ON WINNER?
  1797. X59100    CALL RSPSUB(454,ODO2)
  1798. XC                        !NOT ACCESSIBLE.
  1799. X    RETURN
  1800. XC
  1801. X59200    IF(PRSA.EQ.DRINKW) GO TO 59300
  1802. XC                        !DRINK FOOD?
  1803. X    CALL NEWSTA(PRSO,455,0,0,0)
  1804. XC                        !NO, IT DISAPPEARS.
  1805. X    RETURN
  1806. XC
  1807. X59300    CALL RSPEAK(456)
  1808. XC                        !YES, JOKE.
  1809. X    RETURN
  1810. XC
  1811. X59400    IF(.NOT.DRKBLE(PRSO)) GO TO 59600
  1812. XC                        !DRINKABLE?
  1813. X    IF(OCAN(PRSO).EQ.0) GO TO 59100
  1814. XC                        !YES, IN SOMETHING?
  1815. X    IF(OADV(OCAN(PRSO)).NE.WINNER) GO TO 59100
  1816. X    IF(QOPEN(OCAN(PRSO))) GO TO 59500
  1817. XC                        !CONT OPEN?
  1818. X    CALL RSPEAK(457)
  1819. XC                        !NO, JOKE.
  1820. X    RETURN
  1821. XC
  1822. X59500    CALL NEWSTA(PRSO,458,0,0,0)
  1823. XC                        !GONE.
  1824. X    RETURN
  1825. XC
  1826. X59600    CALL RSPSUB(453,ODO2)
  1827. XC                        !NOT FOOD OR DRINK.
  1828. X    RETURN
  1829. XC
  1830. XC V137--    BURN.  COMPLICATED.
  1831. XC
  1832. X60000    IF(and(OFLAG1(PRSI),(FLAMBT+LITEBT+ONBT)).NE.
  1833. X&        (FLAMBT+LITEBT+ONBT)) GO TO 60400
  1834. X    IF(OBJACT(X)) RETURN
  1835. XC                        !OBJ HANDLE?
  1836. X    IF(OCAN(PRSO).NE.RECEP) GO TO 60050
  1837. XC                        !BALLOON?
  1838. X    IF(OAPPLI(OACTIO(BALLO),0)) RETURN
  1839. XC                        !DID IT HANDLE?
  1840. X60050    IF(and(OFLAG1(PRSO),BURNBT).EQ.0) GO TO 60300
  1841. X    IF(OADV(PRSO).NE.WINNER) GO TO 60100
  1842. XC                        !CARRYING IT?
  1843. X    CALL RSPSUB(459,ODO2)
  1844. X    CALL JIGSUP(460)
  1845. X    RETURN
  1846. XC
  1847. X60100    J=OCAN(PRSO)
  1848. XC                        !GET CONTAINER.
  1849. X    IF(QHERE(PRSO,HERE).OR. ((AV.NE.0).AND.(J.EQ.AV)))
  1850. X&        GO TO 60200
  1851. X    IF(J.EQ.0) GO TO 60150
  1852. XC                        !INSIDE?
  1853. X    IF(.NOT.QOPEN(J)) GO TO 60150
  1854. XC                        !OPEN?
  1855. X    IF(QHERE(J,HERE).OR.((AV.NE.0).AND.(OCAN(J).EQ.AV)))
  1856. X&        GO TO 60200
  1857. X60150    CALL RSPEAK(461)
  1858. XC                        !CANT REACH IT.
  1859. X    RETURN
  1860. XC
  1861. X60200    CALL RSPSUB(462,ODO2)
  1862. XC                        !BURN IT.
  1863. X    CALL NEWSTA(PRSO,0,0,0,0)
  1864. X    RETURN
  1865. XC
  1866. X60300    CALL RSPSUB(463,ODO2)
  1867. XC                        !CANT BURN IT.
  1868. X    RETURN
  1869. XC
  1870. X60400    CALL RSPSUB(301,ODI2)
  1871. XC                        !CANT BURN IT WITH THAT.
  1872. X    RETURN
  1873. XC VAPPLI, PAGE 9
  1874. XC
  1875. XC V138--    MUNG.  GO TO COMMON ATTACK CODE.
  1876. XC
  1877. X63000    I=466
  1878. XC                        !CHOOSE PHRASE.
  1879. X    IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66100
  1880. X    IF(.NOT.OBJACT(X)) CALL RSPSB2(466,ODO2,RMK)
  1881. X    RETURN
  1882. XC
  1883. XC V139--    KILL.  GO TO COMMON ATTACK CODE.
  1884. XC
  1885. X64000    I=467
  1886. XC                        !CHOOSE PHRASE.
  1887. X    GO TO 66100
  1888. XC
  1889. XC V140--    SWING.  INVERT OBJECTS, FALL THRU TO ATTACK.
  1890. XC
  1891. X65000    J=PRSO
  1892. XC                        !INVERT.
  1893. X    PRSO=PRSI
  1894. X    PRSI=J
  1895. X    J=ODO2
  1896. X    ODO2=ODI2
  1897. X    ODI2=J
  1898. X    PRSA=ATTACW
  1899. XC                        !FOR OBJACT.
  1900. XC
  1901. XC V141--    ATTACK.  FALL THRU TO ATTACK CODE.
  1902. XC
  1903. X66000    I=468
  1904. XC
  1905. XC COMMON MUNG/ATTACK/SWING/KILL CODE.
  1906. XC
  1907. X66100    IF(PRSO.NE.0) GO TO 66200
  1908. XC                        !ANYTHING?
  1909. X    CALL RSPEAK(469)
  1910. XC                        !NO, JOKE.
  1911. X    RETURN
  1912. XC
  1913. X66200    IF(OBJACT(X)) RETURN
  1914. XC                        !OBJ HANDLE?
  1915. X    IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66300
  1916. X    IF(and(OFLAG1(PRSO),VICTBT).EQ.0)
  1917. X&        CALL RSPSUB(470,ODO2)
  1918. X    RETURN
  1919. XC
  1920. X66300    J=471
  1921. XC                        !ASSUME NO WEAPON.
  1922. X    IF(PRSI.EQ.0) GO TO 66500
  1923. X    IF(and(OFLAG2(PRSI),WEAPBT).EQ.0) GO TO 66400
  1924. X    MELEE=1
  1925. XC                        !ASSUME SWORD.
  1926. X    IF(PRSI.NE.SWORD) MELEE=2
  1927. XC                        !MUST BE KNIFE.
  1928. X    I=BLOW(PLAYER,PRSO,MELEE,.TRUE.,0)
  1929. XC                        !STRIKE BLOW.
  1930. X    RETURN
  1931. XC
  1932. X66400    J=472
  1933. XC                        !NOT A WEAPON.
  1934. X66500    CALL RSPSB2(I,ODO2,J)
  1935. XC                        !JOKE.
  1936. X    RETURN
  1937. XC VAPPLI, PAGE 10
  1938. XC
  1939. XC V142--    WALK.  PROCESSED EXTERNALLY.
  1940. XC
  1941. X68000    VAPPLI=WALK(X)
  1942. X    RETURN
  1943. XC
  1944. XC V143--    TELL.  PROCESSED IN GAME.
  1945. XC
  1946. X69000    CALL RSPEAK(603)
  1947. X    RETURN
  1948. XC
  1949. XC V144--    PUT.  PROCESSED EXTERNALLY.
  1950. XC
  1951. X70000    VAPPLI=PUT(.TRUE.)
  1952. X    RETURN
  1953. XC
  1954. XC V145,V146,V147,V148--    DROP/GIVE/POUR/THROW
  1955. XC
  1956. X71000    CONTINUE
  1957. X72000    CONTINUE
  1958. X73000    CONTINUE
  1959. X74000    VAPPLI=DROP(.FALSE.)
  1960. X    RETURN
  1961. XC
  1962. XC V149--    SAVE
  1963. XC
  1964. X77000    IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 77100
  1965. X    CALL RSPEAK(828)
  1966. XC                        !NO SAVES IN ENDGAME.
  1967. X    RETURN
  1968. XC
  1969. X77100    CALL SAVEGM
  1970. X    RETURN
  1971. XC
  1972. XC V150--    RESTORE
  1973. XC
  1974. X#ifdef PDP
  1975. X78000    call restor
  1976. X#else
  1977. X78000    IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 78100
  1978. X    CALL RSPEAK(829)
  1979. XC                        !NO RESTORES IN ENDGAME.
  1980. X     RETURN
  1981. XC
  1982. X78100    CALL RSTRGM
  1983. X#endif PDP
  1984. X    RETURN
  1985. XC VAPPLI, PAGE 11
  1986. XC
  1987. XC V151--    HELLO
  1988. XC
  1989. X80000    IF(PRSO.NE.0) GO TO 80100
  1990. XC                        !ANY OBJ?
  1991. X    CALL RSPEAK(346+RND(4))
  1992. XC                        !NO, VANILLA HELLO.
  1993. X    RETURN
  1994. XC
  1995. X80100    IF(PRSO.NE.AVIAT) GO TO 80200
  1996. XC                        !HELLO AVIATOR?
  1997. X    CALL RSPEAK(350)
  1998. XC                        !NOTHING HAPPENS.
  1999. X    RETURN
  2000. XC
  2001. X80200    IF(PRSO.NE.SAILO) GO TO 80300
  2002. XC                        !HELLO SAILOR?
  2003. X    HS=HS+1
  2004. XC                        !COUNT.
  2005. X    I=351
  2006. XC                        !GIVE NORMAL OR
  2007. X    IF(MOD(HS,10).EQ.0) I=352
  2008. XC                        !RANDOM MESSAGE.
  2009. X    IF(MOD(HS,20).EQ.0) I=353
  2010. X    CALL RSPEAK(I)
  2011. XC                        !SPEAK UP.
  2012. X    RETURN
  2013. XC
  2014. X80300    IF(OBJACT(X)) RETURN
  2015. XC                        !OBJ HANDLE?
  2016. X    I=354
  2017. XC                        !ASSUME VILLAIN.
  2018. X    IF(and(OFLAG2(PRSO),(VILLBT+ACTRBT)).EQ.0) I=355
  2019. X    CALL RSPSUB(I,ODO2)
  2020. XC                        !HELLO THERE
  2021. XC                        !
  2022. X    RETURN
  2023. XC
  2024. XC V152--    LOOK INTO
  2025. XC
  2026. X81000    IF(OBJACT(X)) RETURN
  2027. XC                        !OBJ HANDLE?
  2028. X    IF(and(OFLAG1(PRSO),DOORBT).EQ.0) GO TO 81300
  2029. X    IF(.NOT.QOPEN(PRSO)) GO TO 81200
  2030. XC                        !OPEN?
  2031. X    CALL RSPSUB(628,ODO2)
  2032. XC                        !OPEN DOOR- UNINTERESTING.
  2033. X    RETURN
  2034. XC
  2035. X81200    CALL RSPSUB(525,ODO2)
  2036. XC                        !CLOSED DOOR- CANT SEE.
  2037. X    RETURN
  2038. XC
  2039. X81300    IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 81400
  2040. X    IF(QOPEN(PRSO).OR.(and(OFLAG1(PRSO),TRANBT).NE.0))
  2041. X&        GO TO 81400
  2042. X    IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 81200
  2043. X    CALL RSPSUB(630,ODO2)
  2044. XC                        !CANT LOOK INSIDE.
  2045. X    RETURN
  2046. XC
  2047. X81400    IF(QEMPTY(PRSO)) GO TO 81500
  2048. XC                        !VEH OR SEE IN.  EMPTY?
  2049. X    CALL PRINCO(PRSO,573)
  2050. XC                        !NO, LIST CONTENTS.
  2051. X    RETURN
  2052. XC
  2053. X81500    CALL RSPSUB(629,ODO2)
  2054. XC                        !EMPTY.
  2055. X    RETURN
  2056. XC
  2057. XC V153--    LOOK UNDER
  2058. XC
  2059. X82000    IF(.NOT.OBJACT(X)) CALL RSPEAK(631)
  2060. XC                        !OBJECT HANDLE?
  2061. X    RETURN
  2062. XC VAPPLI, PAGE 12
  2063. XC
  2064. XC V154--    PUMP
  2065. XC
  2066. X83000    IF((OROOM(PUMP).EQ.HERE).OR.(OADV(PUMP).EQ.WINNER))
  2067. X&        GO TO 83100
  2068. X    CALL RSPEAK(632)
  2069. XC                        !NO.
  2070. X    RETURN
  2071. XC
  2072. X83100    PRSI=PUMP
  2073. XC                        !BECOMES INFLATE
  2074. X    PRSA=INFLAW
  2075. XC                        !X WITH PUMP.
  2076. X    GO TO 22000
  2077. XC                        !DONE.
  2078. XC
  2079. XC V155--    WIND
  2080. XC
  2081. X84000    IF(.NOT.OBJACT(X)) CALL RSPSUB(634,ODO2)
  2082. XC                        !OBJ HANDLE?
  2083. X    RETURN
  2084. XC
  2085. XC V156--    CLIMB
  2086. XC V157--    CLIMB UP
  2087. XC V158--    CLIMB DOWN
  2088. XC
  2089. X85000    CONTINUE
  2090. X86000    CONTINUE
  2091. X87000    I=XUP
  2092. XC                        !ASSUME UP.
  2093. X    IF(PRSA.EQ.CLMBDW) I=XDOWN
  2094. XC                        !UNLESS CLIMB DN.
  2095. X    F=(and(OFLAG2(PRSO),CLMBBT)).NE.0
  2096. X    IF(F.AND.FINDXT(I,HERE)) GO TO 87500
  2097. XC                        !ANYTHING TO CLIMB?
  2098. X    IF(OBJACT(X)) RETURN
  2099. XC                        !OBJ HANDLE?
  2100. X    I=657
  2101. X    IF(F) I=524
  2102. XC                        !VARIETY OF JOKES.
  2103. X    IF(.NOT.F .AND.((PRSO.EQ.WALL).OR.
  2104. X&        ((PRSO.GE.WNORT).AND.(PRSO.LE.WNORT+3))))
  2105. X&        I=656
  2106. X    CALL RSPEAK(I)
  2107. XC                        !JOKE.
  2108. X    RETURN
  2109. XC
  2110. X87500    PRSA=WALKW
  2111. XC                        !WALK
  2112. X    PRSO=I
  2113. XC                        !IN SPECIFIED DIR.
  2114. X    VAPPLI=WALK(X)
  2115. X    RETURN
  2116. XC
  2117. X    END
  2118. XC CLOCKD- CLOCK DEMON FOR INTERMOVE CLOCK EVENTS
  2119. XC
  2120. XC DECLARATIONS
  2121. XC
  2122. X    LOGICAL FUNCTION CLOCKD(X)
  2123. X    IMPLICIT INTEGER (A-Z)
  2124. XC
  2125. XC CLOCK INTERRUPTS
  2126. XC
  2127. X#include "clock.h"
  2128. XC
  2129. X    CLOCKD=.FALSE.
  2130. XC                        !ASSUME NO ACTION.
  2131. X    DO 100 I=1,CLNT
  2132. X      IF(.NOT.CFLAG(I) .OR.(CTICK(I).EQ.0)) GO TO 100
  2133. X      IF(CTICK(I).LT.0) GO TO 50
  2134. XC                        !PERMANENT ENTRY?
  2135. X      CTICK(I)=CTICK(I)-1
  2136. X      IF(CTICK(I).NE.0) GO TO 100
  2137. XC                        !TIMER EXPIRED?
  2138. X50      CLOCKD=.TRUE.
  2139. X      CALL CEVAPP(CACTIO(I))
  2140. XC                        !DO ACTION.
  2141. X100    CONTINUE
  2142. X    RETURN
  2143. XC
  2144. X    END
  2145. END_OF_verbs.F
  2146. if test 17427 -ne `wc -c <verbs.F`; then
  2147.     echo shar: \"verbs.F\" unpacked with wrong size!
  2148. fi
  2149. # end of overwriting check
  2150. fi
  2151. echo shar: End of archive 2 \(of 7\).
  2152. cp /dev/null ark2isdone
  2153. MISSING=""
  2154. for I in 1 2 3 4 5 6 7 ; do
  2155.     if test ! -f ark${I}isdone ; then
  2156.     MISSING="${MISSING} ${I}"
  2157.     fi
  2158. done
  2159. if test "${MISSING}" = "" ; then
  2160.     echo You have unpacked all 7 archives.
  2161.     rm -f ark[1-9]isdone
  2162. else
  2163.     echo You still need to unpack the following archives:
  2164.     echo "        " ${MISSING}
  2165. fi
  2166. ##  End of shell archive.
  2167. exit 0
  2168.